const db = wx.cloud.database();
const userCollection = db.collection("usersDataList");
Page({
  /**
   * 页面的初始数据
   */
  data: {
    currentDate: new Date().getTime(),
    showPicker: false,
    minDate: new Date(1950, 0, 1).getTime(), // 最小日期（2020-01-01）
    maxDate: new Date().getTime(), // 最大日期（2025-12-31）
    form: {
      nickName: "",
      sexRadio: "",
      birthDate: "",
      eyeRadio: "",
    },
    hasEmptyField: true,
    fromPage: "", // 添加来源页面字段
    isEdit: false, // 添加编辑状态标识
    userId: "", // 添加用户ID字段
  },
  updateMyself() {
    // 表单验证
    const validationResult = this.validateForm();
    if (!validationResult.isValid) {
      wx.showToast({
        title: validationResult.message,
        icon: "none",
        duration: 2000,
      });
      return;
    }

    wx.showLoading({ title: "保存中..." });

    const formData = {
      ...this.data.form,
    };

    // 根据isEdit判断是更新还是新增
    if (this.data.isEdit) {
      // 更新操作，使用保存的userId
      formData.id = this.data.userId;
      console.log(formData);

      wx.cloud
        .callFunction({
          name: "upsertUserData",
          data: {
            formData: formData,
            operation: "update", // 标识为更新操作
          },
        })
        .then((res) => {
          console.log("更新成功:", res);
          wx.hideLoading();
          wx.showToast({
            title: "更新成功",
            icon: "success",
          });
          wx.setStorageSync("selectedUserId", formData.id);
          wx.switchTab({
            url: "/pages/home/home",
          });
        })
        .catch((err) => {
          console.error("更新失败:", err);
          wx.hideLoading();
          wx.showToast({
            title: `更新失败: ${err.errMsg || "未知错误"}`,
            icon: "none",
            duration: 3000,
          });
        });
    } else {
      // 新增操作，生成新ID
      formData.id = Math.floor(10000 + Math.random() * 90000);
      wx.cloud
        .callFunction({
          name: "upsertUserData",
          data: {
            formData: formData,
            operation: "add", // 标识为新增操作
          },
        })
        .then((res) => {
          console.log("新增成功:", res);
          wx.hideLoading();
          wx.showToast({
            title: "新增成功",
            icon: "success",
          });
          wx.setStorageSync("selectedUserId", formData.id);
          wx.switchTab({
            url: "/pages/home/home",
          });
        })
        .catch((err) => {
          console.error("新增失败:", err);
          wx.hideLoading();
          wx.showToast({
            title: `新增失败: ${err.errMsg || "未知错误"}`,
            icon: "none",
            duration: 3000,
          });
        });
    }
  },
  // 表单验证方法
  validateForm() {
    const { form } = this.data;

    // 检查昵称
    if (!form.nickName) {
      return {
        isValid: false,
        message: "请输入姓名",
      };
    }

    // 检查性别
    if (!form.sexRadio) {
      return {
        isValid: false,
        message: "请选择性别",
      };
    }

    // 检查出生日期
    if (!form.birthDate) {
      return {
        isValid: false,
        message: "请选择出生日期",
      };
    }

    // 检查眼睛状态
    if (!form.eyeRadio) {
      return {
        isValid: false,
        message: "请选择眼睛状态",
      };
    }

    return {
      isValid: true,
    };
  },
  // 统一设置form字段的方法
  setFormData(key, value) {
    this.setData(
      {
        [`form.${key}`]: value.trim(),
      },
      this.checkFormEmpty
    );
  },

  // 检查是否有空值
  checkFormEmpty() {
    const { form } = this.data;
    const hasEmpty = Object.values(form).every((v) => !!v);
    this.setData({
      hasEmptyField: !hasEmpty,
    });
  },
  inputBind(event) {
    this.setFormData("nickName", event.detail.value);
  },
  // 确认选择
  onConfirm(event) {
    const selectedDate = new Date(event.detail);
    this.setData({
      showPicker: false,
    });
    this.setFormData(
      "birthDate",
      `${selectedDate.getFullYear()}-${
        selectedDate.getMonth() + 1
      }-${selectedDate.getDate()}`
    );
  },

  // 取消选择
  onCancel() {
    this.setData({
      showPicker: false,
    });
  },
  onChangeSex(event) {
    this.setFormData("sexRadio", event.detail);
  },
  onChangeEye(event) {
    this.setFormData("eyeRadio", event.detail);
  },
  // 点击 cell 时切换选中状态
  onCellClick(event) {
    this.setData({
      radio: event.currentTarget.dataset.name,
    });
  },
  changeDate() {
    this.setData({
      showPicker: true,
    });
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    if (options && options.userData) {
      const userData = JSON.parse(options.userData);
      this.setData(
        {
          form: {
            nickName: userData.nickName || "",
            sexRadio: userData.sexRadio || "",
            birthDate: userData.birthDate || "",
            eyeRadio: userData.eyeRadio || "",
          },
          isEdit: true, // 设置编辑状态
          userId: userData.id || "", // 保存用户ID
        },
        () => {
          this.checkFormEmpty(); // 在设置完表单数据后检查空值
        }
      );
      // 设置页面标题为"编辑防控档案"
      wx.setNavigationBarTitle({
        title: "编辑防控档案",
      });
    } else {
      // 设置页面标题为"新建防控档案"
      wx.setNavigationBarTitle({
        title: "新建防控档案",
      });
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {},

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {},

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {},

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {},

  // 删除用户数据
  deleteUserData() {
    wx.showModal({
      title: "确认删除",
      content: "确定要删除这个防控档案吗？",
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({ title: "删除中..." });
          // 首先删除recordsData集合中的相关记录
          const recordsCollection = db.collection("recordsData");
          recordsCollection
            .where({
              _id: this.data.userId,
            })
            .remove()
            .then(() => {
              // 然后删除用户数据
              wx.cloud
                .callFunction({
                  name: "upsertUserData",
                  data: {
                    formData: { id: this.data.userId },
                    operation: "delete",
                  },
                })
                .then((res) => {
                  console.log("删除成功:", res);
                  // 获取用户数据列表
                  userCollection.get({
                    success: (res) => {
                      if (
                        res.data &&
                        res.data.length > 0 &&
                        res.data[0].records &&
                        res.data[0].records.length > 0
                      ) {
                        // 获取最后一条记录的ID
                        const lastRecord =
                          res.data[0].records[res.data[0].records.length - 1];
                        wx.setStorageSync("selectedUserId", lastRecord.id);
                      }
                      wx.hideLoading();
                      wx.showToast({
                        title: "删除成功",
                        icon: "success",
                      });
                      wx.switchTab({
                        url: "/pages/home/home",
                      });
                    },
                    fail: (err) => {
                      console.error("获取数据失败:", err);
                      wx.hideLoading();
                      wx.showToast({
                        title: "删除成功",
                        icon: "success",
                      });
                      wx.switchTab({
                        url: "/pages/home/home",
                      });
                    },
                  });
                })
                .catch((err) => {
                  console.error("删除失败:", err);
                  wx.hideLoading();
                  wx.showToast({
                    title: `删除失败: ${err.errMsg || "未知错误"}`,
                    icon: "none",
                    duration: 3000,
                  });
                });
            })
            .catch((err) => {
              console.error("删除recordsData失败:", err);
              wx.hideLoading();
              wx.showToast({
                title: `删除失败: ${err.errMsg || "未知错误"}`,
                icon: "none",
                duration: 3000,
              });
            });
        }
      },
    });
  },
});
